

//获取应用实例(获取app.js全局变量必须获取应用实例)
const App = getApp()

//条码、二维码生成
const wxbarcode = require("../../../../lib/wxbarcode/index.js")
//网络请求封装
import Request_post from "../../../../request/Request_post"
import Request_get from "../../../../request/Request_get"

//系统设置项目:(请求地址-在封装中已经引入，这里不需要;   api调用的Appid-partner_app_id;   渠道ID-as_appid)
import config from '../../../../config/config'; 

// 缓存rul图片到本地
import cacheimg from "../../../../utils/cacheImg"

//引入时间函数
var date = require("../../../../utils/CustomFunction/getDayFirstNowLast.js")
var time = require("../../../../utils/CustomFunction/getNowTime.js")

//时间格式化
var formatDate = require("../../../../utils/CustomFunction/dateFormat.js")

//全局数组：优惠券样式
import wxGloalArray from "../../../../config/GlobalArray.js"
//获取当前的日期时间 yyyy-mm-dd hh:mm:ss
var todayDatetTime = require("../../../../utils/CustomFunction/getNowDateTime.js")

//引入日期时间：（格式化、反格式化）函数
var formatDate = require("../../../../utils/CustomFunction/dateFormat.js")
var unformatDate = require("../../../../utils/CustomFunction/dateUnFormat.js")

// 获取当前的日期 yyyy-mm-dd
var getToday = require("../../../../utils/CustomFunction/getToday.js")

// 获取明天的日期 yyyy-mm-dd
var getTomorrow = require("../../../../utils/CustomFunction/getTomorrow.js")

//获取当前是周几
var getNowWeek = require("../../../../utils/CustomFunction/getNowWeek.js")

//日期时间（yyyy-mm-dd hh:mm:ss）转换为时间戳
var timeTostamp = require("../../../../utils/CustomFunction/timeTostamp.js")

//星期X 转换为 数值
var weekTonumber = require("../../../../utils/CustomFunction/weekTonumber.js")

// 将0开头的长度为2位的字符串转换为数值，如：  '02' 转为 2
var TwoStringToNumbser = require("../../../../utils/CustomFunction/TwoStringToNumbser.js")

//计算两个时间戳的差值，返回毫秒
var intervalTime = require("../../../../utils/CustomFunction/intervalTime.js")

Page({

	/**
	 * 页面的初始数据
	 */
	data: {

		//倒计时测试用时间戳
		// time: 30 * 60 * 60 * 1000,

		pageImage: 
    [ 
      {key: "SoldOut",value: config.imageUrl+"SoldOut.png"},																				// 已售罄图片
      {key: "Default_ActTypidImage01",value: config.imageUrl+"Default_ActTypidImage01.jpg"},				// 默认活动的主图(团购)
			{key: "Default_ActTypidImage02",value: config.imageUrl+"Default_ActTypidImage02.jpg"},				// 默认活动的主图(秒杀)
			{key: "Default_ActTypidImage03",value: config.imageUrl+"Default_ActTypidImage03.jpg"},				// 默认活动的主图(拼团)
    ],

		// 显示倒计时的时间戳
		ShowCountdownStamp: App.globalData.ShowCountdownStamp,

		// 营销活动可购买剩余数量在页面上的显示上限
		ActshowVldqty: App.globalData.ActshowVldqty,

		Tabs_list:[
			// {name:"全部",isActive:true},
			{name:"在线团购",isActive:true},
			{name:"限时秒杀",isActive:false},
			{name:"多人拼团",isActive:false},
		],

		// 活动类型，默认第一个tab标签：团购活动
		typid:"01",

	},

	/** tabbar 选中事件 (本页面的：active == 0) */ 
  onChange(event) {
    this.setData({ active: event.detail });
    if(this.data.active == 1){
      wx.redirectTo({
        url:"/SubpkgMarketing/pages/Activity/Orderlist/Orderlist",
			})
		}else if(this.data.active == 2){
			wx.redirectTo({
        url:App.globalData.homePage,
      })
		}
  },


	/** 外链图片Url资源，缓存到本地 */
  storeImage:function(){
    var that = this
    let obj = {}
    let pageimgArr = that.data.pageImage
    // 图片外链url：ip:端口 替换成 域名（外链资源不做域名转换了，而是外链资源原始链接必须就是域名url）
    // pageimgArr.forEach(i => {i.value = config.domainName + i.value.split('/').slice(3).join('/')})
    // 调用本地文件缓存方法 mapCacheUrl
    pageimgArr = pageimgArr.map(i => ({
      ...i,imgpath:cacheimg.mapCacheUrl(i.value)
    }))  
    // 数组转换为对象
    pageimgArr.forEach(i => {obj[i.key] = i.imgpath})
    that.setData({pageStoreimg: obj })
    // console.log(that.data.pageStoreimg)
  },


	/** 浮动图标的点击事件：在线营销已购订单列表 */
	actTimelist:function(){
		wx.redirectTo({
			url: '/SubpkgMarketing/pages/Activity/Orderlist/Orderlist',
		})
	},


	/** Vant 倒计时组件 自带事件 finish: 倒计时结束时触发*/
	finished:function(){
		var that = this
		//活动倒计时结束时：执行onShow方法，刷新页面的数据，将倒计时组件隐藏，显示下轮活动预报
		that.onShow()
	},


	/** 接收标签页自定义组件，点击事件---子组件传递过来的参数 */
	handleItemChang(e){
		console.log(e)
		var that = this
		console.log(that.data.Tabs_list)
		const index = e.detail.index;
		const Tabs_list = that.data.Tabs_list
		
		//方式一：使用forEach 遍历数组，遍历数组的时候，修改了v，也会导致源数组被修改
		Tabs_list.forEach((v,i)=>i===index? v.isActive=true:v.isActive=false);
		//方式二：使用for循环
		// for(var n = 0; n < tabs.length; n++){
		// 	n === index? tabs[n].isActive=true:tabs[n].isActive=false
		// }
		that.setData({
			index,
			Tabs_list
		})

		var tab_idx = that.data.index
		if(tab_idx == 0){
			that.setData({
				typid: '01'
			})
			that.onShow();
		}else if(tab_idx == 1){
			that.setData({
				typid: '02'
			})
			that.onShow();
		}else if(tab_idx == 2){
			that.setData({
				typid: '03'
			})
			that.onShow();
		}
	},

	

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad: function (options) {

		
		let typid = options.typid
		if(typid == '01'){
			this.setData({
				Tabs_list:[
					{name:"在线团购",isActive:true},
					{name:"限时秒杀",isActive:false},
					{name:"多人拼团",isActive:false},
				],
				typid: options.typid
			})
		}else if(typid == '02'){
			this.setData({
				Tabs_list:[
					{name:"在线团购",isActive:false},
					{name:"限时秒杀",isActive:true},
					{name:"多人拼团",isActive:false},
				],
				typid: options.typid
			})
		}else if(typid == '03'){
			this.setData({
				Tabs_list:[
					{name:"在线团购",isActive:false},
					{name:"限时秒杀",isActive:false},
					{name:"多人拼团",isActive:true},
				],
				typid: options.typid
			})
		}else{
			this.setData({
				Tabs_list:[
					{name:"在线团购",isActive:true},
					{name:"限时秒杀",isActive:false},
					{name:"多人拼团",isActive:false},
				],
				typid:"01"
			})
		}

		

		// 会员是否注册的标志regflg === 'n'时，路由到引导注册页面
		getApp().loginPromise.then(v => {	//app.js的Promise成功回调（全局变量赋值成功后才执行请求）
			if(App.globalData.regflg === 'n'){
				wx.redirectTo({
				  url: '/pages/Public/boot_regstration/boot_regstration',
				})
				return;
			 }
		 })

	},
	


	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady: function () {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow: function () {
		var that = this
		var _today = unformatDate.DatString(getToday.getToday())
		var _mbrparams = wx.getStorageSync('StrMbrInfo').mbrparams
		// Vant: tabbar(当前选中标签的索引,本页面索引 == 0)
		that.setData({
    	active: 0,
		})
		// 外链资源图片链接 本地缓存
    if(App.globalData.ResourcesLink_Locstr === 'y'){
      that.storeImage();
    // 外链资源图片链接 直接读取url地址
    }else{
      let pageimgArr = that.data.pageImage
      let object = {}
      pageimgArr.forEach(i => {object[i.key] = i.value}) // 数组转换为对象
      that.setData({pageStoreimg: object })
      // console.log(that.data.pageStoreimg)
		}
		
		/*
		 * 专属范围确定：（”“-不限制、00-普通会员、01-业主会员 ）
     *  1. 业主会员：既是会员身份又是业主身份 请求参数 as_copownid =""
     *  2. 普通会员：只是会员身份 请求参数 as_copownid ="00"
     *  3. 目前系统支持的专属范围：
     */
		
    const ownflg = App.globalData.ownflg  // as_copownid 请求参数( ""-全部、00-非专属身份会员、01-专属身份会员)
    if (ownflg == 'y'){
      that.setData({
        copownid:""
      })
    }else if(ownflg == 'n'){
      that.setData({
        copownid:"00"
      })
    }
 
		/**在线活动列表查询 */ 
		getApp().loginPromise.then(v => {	
			/**刷新redis[在线营销活动] 数据，正式版不用，而是由后台做调用，仅供测试使用 */ 
      that.refreshPromise = new Promise((v,t) =>{
        /**随便做一个Promise的成功通知，以便正式版发布，要注释掉下面的创建请求，（redis列表由后台服务创建），但这里为了测试做了一个Promise的嵌套，这个嵌套就不删了，保留着 */
        let value = true
        v(true)
        /**创建redis数据库的活动列表（测试专用） */
        // Request_get.get(
        //   config.domainName+"api_olnmktact/olnmktact-refresh",
        //   {actdat: _today},
        //   function(res){
        //     if(res){
        //       v(true)
        //       console.log('已刷新Redis活动列表数据，活动日期：'+_today)
        //     }
        //   }
        // )
			})

			/**在线营销活动-olnmktact: 002-在线营销活动列表查询 */
			that.refreshPromise.then( v => {
				Request_post.post(
					config.domainName+"api_olnmktact/olnmktact-list",
					{
						chtid: "",
						typid: that.data.typid,
						actbllno: "",
						mbrparams: _mbrparams
					},
					function(res){
						if(res != "undefined" && res.return_no == 1){
							if(App.globalData.Erpimage_Locstr ==='y'){
								let array = res.return_data.actList
								/**将回调结果中的imgurl地址，转换为域名（原地址为：http://ip:port/xxx 转换为：https://域名/xxx） */
								for(var i in array){
									if(array[i].imgurl){
											array[i].imgurl = config.domainName + array[i].imgurl.split('/').slice(3).join('/');
									}
								}
								that.setData({
									/**调用本地文件缓存方法 mapCacheUrl */
									actList:array.map(i => ({
										...i,
										imgpath:cacheimg.mapCacheUrl(i.imgurl),
										/** 当前活动的已售总量 = 活动可售总量 - 今日前已售总量 - 今日已售总量 */
										sumsalqty: i.rul_sumqty + i.rul_dayqty
									})) 
								}) ;
							}else{
								/**使用res的原始回调（数组对象中增加一个imgpath的属性值，因为html标签中用imgpath做渲染） */
								that.setData({
									actList:res.return_data.actList.map(i => ({
										...i,
										imgpath:i.imgurl,
										/** 当前活动的已售总量 = 活动可售总量 - 今日前已售总量 - 今日已售总量 */
										sumsalqty: i.rul_sumqty + i.rul_dayqty
									}))  
								})
							}
							// console.log(that.data.actList)

							/**营销活动效期时段、的数据绑定逻辑处理 */
							that.copTimelimitvld();
						}
					}
				)
			})
		})
	},



	/** 营销活动列表时效计算方法——被调用 */
  copTimelimitvld:function(){
		var that = this
		var array = that.data.actList
		var getnowDateTime = todayDatetTime.getNowDateTime()      //当前日期时间：yyyy-mm-dd hh:mm:ss
		var getTime = getnowDateTime.substring(11,19)             //当前日期时间：hh:mm:ss
		var getDayNumber = getnowDateTime.substring(8,10)         //当前是几号：mm
		var getWeek = getNowWeek.getNowWeek()                     //当前是周几：周一、周二、....周七
		var today = getToday.getToday()                           //获取当天的日期 yyyy-mm-dd
		/**-------------------------------- 活动时间逻辑的控制 begin --------------------------------*/
		for(var i in array){
			array[i].showstyle = 'Default'          							// 列表样式动态改变的标志（Default：普通模式；Reminder：提示模式），默认 Default 
			array[i].Reminder_mode = ''             							// 提醒模式，默认'' (countDown-倒计时、nextRound：下轮提醒)
			array[i].rulechVldmode = ''             							// 规则有效模式，默认"" (now-当前有效、today-本日剩余有效、tomorrow-明日有效、future-未来有效、invalid-无效)
			array[i].toEndtimeGoing = 0             							// 列表对象增加： 当前有效活动的【倒计时】，默认 0 
			array[i].rulrestValid = ''              							// 列表对象增加： 本日剩余时段是否还有有效规则，默认""

			// 全时段有效
			if(array[i].lmttimeps == '00:00:00-23:59:59'){
				var disdatStamp = timeTostamp.timeTostamp(array[i].disdat)        
				var todayNowStamp = timeTostamp.timeTostamp(getnowDateTime)
				array[i].toEndtimeGoing = intervalTime.intervalTime(todayNowStamp,disdatStamp) 
				array[i].Reminder_mode = 'countDown'
				array[i].showstyle = 'Reminder'
				array[i].rulechVldmode = 'now'          // 规则有效模式，默认"" (now-当前有效、today-本日剩余有效、tomorrow-明日有效、future-未来有效、invalid-无效)
			}
			
			// 多时段
			if(array[i].lmttimeps != '00:00:00-23:59:59' ){
				for(var e in array[i].lmttimeps_data){
					var todayBtimeStamp = timeTostamp.timeTostamp(today+" "+array[i].lmttimeps_data[e].btime)  
					var todayEtimeStamp = timeTostamp.timeTostamp(today+" "+array[i].lmttimeps_data[e].etime)      
					var todayNowStamp = timeTostamp.timeTostamp(getnowDateTime)
					// 本日-当前时段有效
					if(todayNowStamp >= todayBtimeStamp && todayNowStamp < todayEtimeStamp){    
						// console.log('本日-当前时段有效')
						array[i].toEndtimeGoing = intervalTime.intervalTime(todayNowStamp,todayEtimeStamp) 
						array[i].showstyle = 'Reminder'
						array[i].Reminder_mode = 'countDown'    // 提醒模式，默认'' (countDown-倒计时、nextRound-下轮提醒)
						array[i].rulechVldmode = 'now'          // 规则有效模式，默认"" (now-当前有效、today-本日剩余有效、tomorrow-明日有效、future-未来有效、invalid-无效)
						break;   //发现有效即终止
					//本日-当前时段无效
					}else{  
						// 本日还有剩余的有效时段
						if(todayNowStamp < todayBtimeStamp && todayNowStamp < todayEtimeStamp){
							array[i].nextRound_btime = '今日 '+array[i].lmttimeps_data[e].btime
							array[i].showstyle = 'Reminder'
							array[i].Reminder_mode = 'nextRound'      // 提醒模式，默认'' (countDown-倒计时、nextRound-下轮提醒)
							array[i].rulechVldmode = 'today'          // 规则有效模式，默认"" (now-当前有效、today-本日剩余有效、tomorrow-明日有效、future-未来有效、invalid-无效)
							break;  //发现有效即终止
						}else if(todayNowStamp > todayBtimeStamp && todayNowStamp > todayEtimeStamp){
							// 如果本日已无有效时段，则预告的是【明日】的第一个活动
							const tomorrow = getTomorrow.getTomorrow()
							array[i].nextRound_btime = tomorrow+" "+array[i].lmttimeps_data[0].btime
							array[i].showstyle = 'Reminder'
							array[i].Reminder_mode = 'nextRound'      // 提醒模式，默认'' (countDown-倒计时、nextRound-下轮提醒)
							array[i].rulechVldmode = 'tomorrow'       // 规则有效模式，默认"" (now-当前有效、today-本日剩余有效、tomorrow-明日有效、future-未来有效、invalid-无效)
							// break;  //判断今日的时段全部无效，不能终止循环，必须循环所有对象值，比如，当前时间是 10:00:00   而 多个段的第一个时段是 08:00:00 - 08:30:00,这样就满足了所谓的当前时间 大于开始时段 && 大于截止时段，就会被判断为今日的已全部无效，
						}    
					}
				}
			}
		}
		// 最终的活动列表数组赋值
		that.setData({
			actList: array
		})
		// console.log(that.data.actList)
	},


	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide: function () {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload: function () {

	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh: function () {

	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom: function () {

	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage: function () {

	}
})